為何許多開源的 terraform module 內部使用的都是其他的 module,而不是從 resource 單位開始?
如何建立一個 module
ex. 我們需求是產生一個 IAM User
resource.aws_iam_user
達成需求iam_user
外,加上
iam_group
+ iam_policy
password_policy
增加密碼安全iam_user
思考的更全面,更接近最佳實踐在這次的 Best Practice 追尋之旅中,我們會帶大家去看其他團隊所寫出的 terraform module
一般來說,一個好 module 會帶來很多好處
能符合需求,參數方便使用,內容邏輯清楚的 module 就是好 module
然而要寫好一個 module 需要很多經驗,不僅要對 aws 元件,架構都很熟悉,還要考量管理與安全。我們有機會再來分享。
為什麼要花這麼多時間講 account / iam / security 的基礎設定?
因為人家寫出來的就是這麼的安全,開頭直接立於不被駭之地
昨天使用 reset root IAM user 的密碼,並使用 pgp key 加密保護,今天要進一步強化 IAM 的安全性,包括
本日進度
賽後文章會整理放到個人的部落格上 http://chechia.net/
密碼強度的重要性不需要再強調,強迫 user 使用高強度的密碼並且定期更新,才能將地安全風險
想要透過 web console 修改 password policy 的朋友可以看aws doc: setting account password policy。我們這邊會使用 terraform 配置
修改 terragrunt-infrastructure-modules
module.iam_user
設定的是 login profile 的 password,是管理員配給 user 的第一把 password,並且登入後必須更換密碼如果想要強化密碼管理
首先先更改 terraform module,開啟 password policy
resource.aws_iam_account_password_policy
# aws_iam_account_password_policy.tf
resource "aws_iam_account_password_policy" "strict" {
allow_users_to_change_password = true
minimum_password_length = var.minimum_password_length
hard_expiry = true
max_password_age = var.max_password_age
require_lowercase_characters = true
require_numbers = true
require_uppercase_characters = true
require_symbols = true
password_reuse_prevention = 0
}
# variables.tf
variable "minimum_password_length" {
type = number
description = "The number of days that an user password is valid."
default = 32
}
variable "max_password_age" {
type = number
description = "Minimum length to require for user passwords."
default = 90
}
進行 terragrunt plan,沒問題的話就可以直接 apply
aws-vault exec terraform-30day-root-iam-user --no-session -- terragrunt plan
Terraform used the selected providers to generate the following execution
plan. Resource actions are indicated with the following symbols:
+ create
Terraform will perform the following actions:
# aws_iam_account_password_policy.strict will be created
+ resource "aws_iam_account_password_policy" "strict" {
+ allow_users_to_change_password = true
+ expire_passwords = (known after apply)
+ hard_expiry = true
+ id = (known after apply)
+ max_password_age = 90
+ minimum_password_length = 32
+ password_reuse_prevention = 0
+ require_lowercase_characters = true
+ require_numbers = true
+ require_symbols = true
+ require_uppercase_characters = true
}
Plan: 1 to add, 0 to change, 0 to destroy.
aws-vault exec terraform-30day-root-iam-user --no-session -- terragrunt apply
注意更改密碼的副作用
Apply passsword policy 後,我們使用原先的密碼走 aws web console 登入看看
接著我們可以為自己的 IAM User 啟用 MFA 裝置
在右上角 User -> security credentials -> MFA
NOTE: 這裡是 IAM User login 時需要輸入 MFA,我們之後會設定 child account 下 iam-role assume 時都需要輸入 MFA
明天會前十篇的重點之一:cross account 的 iam role 配置